import * as vscode from 'vscode';
import {dedent} from "../../../utils";

// documentation中使用了代码块，代码块中写的事makedown格式，首行不能为空
let layoutItems = [
    {
        "label": "Layout_Create",
        "insertText": dedent`
        GUI:Layout_Create(\${1:parent}, \${2:ID}, \${3:x}, \${4:y}, \${5:width}, \${6:height}, \${7:isClip})
        `,
        "documentation": dedent`# 创建层容器
        [在线文档](http://engine-doc.996m2.com/web/#/22/3649)

        | 参数   | 必选 | 类型   | 注释        |
        | :----- | :--- | :----- | :---------- |
        | parent | 是   | obj    | 父节点对象  |
        | ID     | 是   | string | 唯一ID      |
        | x      | 是   | int    | 位置 横坐标 |
        | y      | 是   | int    | 位置 纵坐标 |
        | width  | 是   | int    | 宽度        |
        | height | 是   | int    | 长度        |
        | isClip | 是   | bool   | 是否裁切    |

        - 示例代码

          \`\`\`
          local layout = GUI:Layout_Create(parent, "layout", 0, 0, 100, 100, false)
          \`\`\`
        `
    },
    {
        "label": "Layout_setBackGroundColor",
        "insertText": dedent`
        GUI:Layout_setBackGroundColor(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置层背景颜色
        [在线文档](http://engine-doc.996m2.com/web/#/22/3649)

        | 参数   | 必选 | 类型   | 注释                                                         |
        | :----- | :--- | :----- | :----------------------------------------------------------- |
        | widget | 是   | obj    | 层对象                                                       |
        | value  | 是   | string | 色值(“#000000”) ! 渐变色需传参table \`{"#FF0000", "#FFFFFF"}\` |
        `
    },
    {
        "label": "Layout_setBackGroundColorType",
        "insertText": dedent`
        GUI:Layout_setBackGroundColorType(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置层背景颜色类型
        [在线文档](http://engine-doc.996m2.com/web/#/22/3649)

        | 参数   | 必选 | 类型 | 注释                 |
        | :----- | :--- | :--- | :------------------- |
        | widget | 是   | obj  | 层对象               |
        | value  | 是   | int  | 类型(1单色，2渐变色) |
        `
    },
    {
        "label": "Layout_setBackGroundColorOpacity",
        "insertText": dedent`
        GUI:Layout_setBackGroundColorOpacity(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置层背景颜色不透明度
        [在线文档](http://engine-doc.996m2.com/web/#/22/3649)

        | 参数   | 必选 | 类型 | 注释            |
        | :----- | :--- | :--- | :-------------- |
        | widget | 是   | obj  | 层对象          |
        | value  | 是   | int  | 不透明度(0-255) |
        `
    },
    {
        "label": "Layout_setClippingEnabled",
        "insertText": dedent`
        GUI:Layout_setClippingEnabled(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置层背景是否裁切
        [在线文档](http://engine-doc.996m2.com/web/#/22/3649)

        | 参数   | 必选 | 类型 | 注释     |
        | :----- | :--- | :--- | :------- |
        | widget | 是   | obj  | 层对象   |
        | value  | 是   | bool | 是否裁切 |
        `
    },
    {
        "label": "Layout_setBackGroundImage",
        "insertText": dedent`
        GUI:Layout_setBackGroundImage(\${1:widget}, \${2:value})
        `,
        "documentation": dedent`# 设置层背景图片
        [在线文档](http://engine-doc.996m2.com/web/#/22/3649)

        | 参数   | 必选 | 类型   | 注释     |
        | :----- | :--- | :----- | :------- |
        | widget | 是   | obj    | 层对象   |
        | value  | 是   | string | 图片路径 |
        `
    },
    {
        "label": "Layout_setBackGroundImageScale9Slice",
        "insertText": dedent`
        GUI:Layout_setBackGroundImageScale9Slice(\${1:widget}, \${2:scale9l}, \${3:scale9r}, \${4:scale9t}, \${5:scale9b})
        `,
        "documentation": dedent`# 设置层背景图片九宫格
        [在线文档](http://engine-doc.996m2.com/web/#/22/3649)

        | 参数    | 必选 | 类型 | 注释     |
        | :------ | :--- | :--- | :------- |
        | widget  | 是   | obj  | 层对象   |
        | scale9l | 是   | int  | 左边比例 |
        | scale9r | 是   | int  | 右边比例 |
        | scale9t | 是   | int  | 上边比例 |
        | scale9b | 是   | int  | 下边比例 |
        `
    },
    {
        "label": "Layout_removeBackGroundImage",
        "insertText": dedent`
        GUI:Layout_removeBackGroundImage(\${1:widget})
        `,
        "documentation": dedent`# 移除层背景图片设置 [3.40.5版本]
        [在线文档](http://engine-doc.996m2.com/web/#/22/3649)

        | 参数   | 必选 | 类型 | 注释   |
        | :----- | :--- | :--- | :----- |
        | widget | 是   | obj  | 层对象 |
        `
    },
    {
        "label": "Layout_getBackGroundImageFile",
        "insertText": dedent`
        GUI:Layout_getBackGroundImageFile(\${1:widget})
        `,
        "documentation": dedent`# 获取层背景图片文件路径 [3.40.8版本]
        [在线文档](http://engine-doc.996m2.com/web/#/22/3649)

        | 参数   | 必选 | 类型 | 注释   |
        | :----- | :--- | :--- | :----- |
        | widget | 是   | obj  | 层对象 |
        `
    }
]



export function getCompletionItems(): vscode.CompletionItem[] {


    const completionItems: vscode.CompletionItem[] = [];
    layoutItems.forEach((item: any) => {
        completionItems.push(createFunctionCompletionItem(item.label, item.insertText, item.documentation));
    });
    return completionItems;
}

function createFunctionCompletionItem(label: string, insertText: string, documentation?: string): vscode.CompletionItem {
    const item = new vscode.CompletionItem(label, vscode.CompletionItemKind.Function);
    item.insertText = new vscode.SnippetString(insertText);
    if (documentation) {
        item.documentation = new vscode.MarkdownString(documentation);
    }
    return item;
}
